/**
 * @file APP_MB_master.c
 * @author Linquan 
 * @brief  modbus主站框架的底层接口，以及协议解析处理接口
 * @version 0.1
 * @date 2025-10-10
 * 
 * @copyright Copyright (c) 2025
 * 
 */

#include "APP_MB_master.h"


#if USE_RTX

/* MB 主站对象 */
ModbusMaster_t modbus_master;

/* 在串口中断中 填入缓冲区 */
void RTU1_MB_Master_Data_add(uint8_t _byte)
{
	Modbus_RTU_RecvTask(&modbus_master, _byte);	
}

/* 定时器接收完成 */
void RTU1_MB_Master_Recv_Finish()
{
	Modbus_Recv_Timeout(&modbus_master);	
}



/* 解析 接收报文 */
void MB_Master_handle(void *ptr)
{
	ModbusMaster_t *master = (ModbusMaster_t*)ptr; 
	
	for(int i = 0; i < master->rx_index ; i++)
	{
		printf("%d,",master->rx_buffer[i]);
	}
	printf(" master->rx_index %d\r\n",  master->rx_index);
	
	
	uint8_t slave_adddr, func_code;
	
	/* 校验错误码 获得 地址及功能码 */
	if(ModbusMaster_addr_code_check(master->rx_buffer, &slave_adddr, &func_code)){ return;}
		
	
    switch (func_code) 
	{
        case MODBUS_FC_READ_COILS:
        case MODBUS_FC_READ_DISCRETE:
          // 填入具体解析函数
		
		
            break;
            
        case MODBUS_FC_READ_HOLDING:
        case MODBUS_FC_READ_INPUT:
            // 填入具体解析函数
		
            break;
            
        case MODBUS_FC_WRITE_SINGLE:
        case MODBUS_FC_WRITE_MULTIPLE:
            // 写操作响应只需确认成功，无数据需要解析
            break;
            
        default:
           break;
    }
	
}


/* 发送接口 */
void MB_Master_RTU1_send(uint8_t* fram_ptr, uint16_t len)
{       	
	comSendBuf(COM4, fram_ptr, len);	
}





#endif


